package com.example.demo.support;

import com.google.common.collect.Maps;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Map;

@EqualsAndHashCode(callSuper = true)
@Data
public class IMSendMessageResponse extends IMBaseResponse {

    private static final Map<Integer, String> ERROR_CODE_MESSAGE = Maps.newHashMap();

    static {
        ERROR_CODE_MESSAGE.put(20001, "请求包非法");
        ERROR_CODE_MESSAGE.put(20002, "UserSig 或 A2 失效");
        ERROR_CODE_MESSAGE.put(20003, "消息发送方或接收方 UserID 无效或不存在，请检查 UserID 是否已导入即时通信 IM");
        ERROR_CODE_MESSAGE.put(20004, "网络异常，请重试");
        ERROR_CODE_MESSAGE.put(20005, "服务器内部错误，请重试");
        ERROR_CODE_MESSAGE.put(20006, "触发发送单聊消息之前回调，App 后台返回禁止下发该消息");
        ERROR_CODE_MESSAGE.put(90001, "JSON 格式解析失败，请检查请求包是否符合 JSON 规范");
        ERROR_CODE_MESSAGE.put(90002, "JSON 格式请求包中 MsgBody 不符合消息格式描述，或者 MsgBody 不是 Array 类型，请参考 TIMMsgElement 对象 的定义");
        ERROR_CODE_MESSAGE.put(90003, "JSON 格式请求包体中缺少 To_Account 字段或者 To_Account 字段不是 String 类型");
        ERROR_CODE_MESSAGE.put(90005, "JSON 格式请求包体中缺少 MsgRandom 字段或者 MsgRandom 字段不是 Integer 类型");
        ERROR_CODE_MESSAGE.put(90006, "JSON 格式请求包体中 MsgTimeStamp 字段不是 Integer 类型");
        ERROR_CODE_MESSAGE.put(90007, "JSON 格式请求包体中 MsgBody 类型不是 Array 类型，请将其修改为 Array 类型");
        ERROR_CODE_MESSAGE.put(90009, "请求需要 App 管理员权限");
        ERROR_CODE_MESSAGE.put(90010, "JSON 格式请求包不符合消息格式描述，请参考 TIMMsgElement 对象 的定义");
        ERROR_CODE_MESSAGE.put(90012, "To_Account 没有注册或不存在，请确认 To_Account 是否导入即时通信 IM 或者是否拼写错误");
        ERROR_CODE_MESSAGE.put(90026, "消息离线存储时间错误（最多不能超过7天）");
        ERROR_CODE_MESSAGE.put(90031, "JSON 格式请求包体中 SyncOtherMachine 字段不是 Integer 类型");
        ERROR_CODE_MESSAGE.put(90044, "JSON 格式请求包体中 MsgLifeTime 字段不是 Integer 类型");
        ERROR_CODE_MESSAGE.put(91000, "服务内部错误，请重试");
        ERROR_CODE_MESSAGE.put(90992, "服务内部错误，请重试；如果所有请求都返回该错误码，且 App 配置了第三方回调，请检查 App 服务器是否正常向即时通信 IM 后台服务器返回回调结果");
        ERROR_CODE_MESSAGE.put(93000, "JSON 数据包超长，消息包体请不要超过 8k");
        ERROR_CODE_MESSAGE.put(90048, "请求的用户帐号不存在");
    }

    // 消息时间戳，UNIX 时间戳
    protected Integer MsgTime;
    // 消息唯一标识，用于撤回。长度不超过50个字符
    protected String MsgKey;

    @Override
    public String transformErrorCode(Integer errorCode) {
        String message = super.transformErrorCode(errorCode);
        if (message != null) {
            return message;
        }
        return ERROR_CODE_MESSAGE.getOrDefault(errorCode, "未知错误");
    }
}
